<template>
  <div class="app-container">
    <el-input
      v-model="input_value"
      type="textarea"
      placeholder="请输入需要去重的数组"
      maxlength="10000"
      rows="20"
      show-word-limit
      @input="handleInputArrays"
    >
    </el-input>
    <pre>Kill ({{ killListLen }})    {{ killListStr }}</pre>
    <pre>Lucky ({{ luckyListLen }})    {{ luckyListStr }}</pre>
  </div>
</template>
<script>
import _ from 'lodash'
import { getRemainingNumbers } from '@/utils/study'

export default {
  name: 'PlusUnique',
  data() {
    return {
      // 输入框的值
      input_value: '',
      // 杀号数组
      killList: [],
      // 幸运数组
      luckyList: Array.from({ length: 49 }, (_, i) => i + 1).map((num) => (num < 10 ? `0${num}` : `${num}`))
    }
  },
  computed: {
    killListLen() {
      return Array.isArray(this.killList) ? this.killList.length : 0
    },
    killListStr() {
      return this.killListLen ? JSON.stringify(this.killList).replace(/[\n\s]/g, '') : '[]'
    },

    luckyListLen() {
      return this.luckyList.length
    },
    luckyListStr() {
      return this.luckyListLen ? JSON.stringify(this.luckyList).replace(/[\n\s]/g, '') : '[]'
    }
  },
  methods: {
    processInput(input) {
      // 如果输入为空，直接返回空数组
      if (!input) {
        return []
      }

      // 正则表达式：匹配所有方括号中的内容
      const numbers = input.match(/\[([^\]]+)\]/g)

      if (!numbers) {
        return []
      }

      // 提取方括号内的数字（包括字符串形式的数字）
      const uniqueNumbers = _.chain(numbers)
        .map((str) => {
          // 提取每个方括号内的所有数字，包括字符串数字
          const matches = str.match(/["']?(\d+)["']?/g)

          // 如果没有匹配到任何数字，返回空数组
          if (!matches) {
            return []
          }

          // 移除数字前后的引号
          return matches.map((numStr) => numStr.replace(/["']/g, ''))
        })
        .flatten() // 展开嵌套的数组
        .map(Number) // 转换为数字
        .uniq() // 去重
        .sort((a, b) => a - b) // 升序排序
        .map((num) => num.toString().padStart(2, '0')) // 补零
        .value()

      // 返回处理后的结果
      // return JSON.stringify(uniqueNumbers).replace(/[\n\s]/g, '')
      return uniqueNumbers
    },
    // 处理输入数组
    handleInputArrays() {
      this.killList = this.processInput(this.input_value)
      this.luckyList = getRemainingNumbers(this.killList)

      navigator.clipboard.writeText(`
        Kill (${this.killListLen})：   ${JSON.parse(this.killListStr).join(', ')}
        Lucky (${this.luckyListLen})：  ${JSON.parse(this.luckyListStr).join(', ')}
      `)
    }
  }
}
</script>
